/*
 * @Author: Allan
 * @Date: 2022-04-29 16:58:05
 * @LastEditors: Allan
 * @LastEditTime: 2022-04-30 11:11:18
 * @FilePath: \golangExcel\main.go
 * @Description: excel operation
 *
 * Copyright (c) 2022 by Allan / ganger@whut.edu.cn, All Rights Reserved.
 */
package main

import (
	"fmt"
	"golangexcel/excel"
	"log"
	"os"
	"time"

	"github.com/tealeg/xlsx"
)

func NewExcel() {
	file := xlsx.NewFile()

	sheet, err := file.AddSheet("收集表")
	if err != nil {
		panic(err.Error())
	}

	excel.SetHeadLine(sheet)
	row := sheet.AddRow()
	cell := row.AddCell()
	cell.Value = "姓名"
	cell = row.AddCell()
	cell.Value = "姓名"

	// row = sheet.AddRow()
	// cell = row.AddCell()
	// cell.Value = "张三"
	// cell = row.AddCell()
	// cell.Value = "男"

	err = file.Save("./excel/demo2.xlsx")
	if err != nil {
		panic(err.Error())
	}
}
func FindContent() {
	file, err := xlsx.OpenFile("./excel/4.23研究生西一入住名单1人.xlsx")
	// file, err := xlsx.OpenFile("./excel/4.18研究生学海7舍入住名单33人.xlsx")
	if err != nil {
		panic(err.Error())
	}
	fmt.Println("-->", file.Sheets[0].Rows[3].Cells[0].Value == "")

	fmt.Println(len(file.Sheets[0].Rows), "行")

	// var i int //从第零列开始
	var j = 1 //从第二行开始
	for {
		// for {
		// 	// 遍历一行
		// 	if file.Sheets[0].Rows[j].Cells[i].Value == "" {
		// 		fmt.Printf("\n")
		// 		break
		// 	}
		// 	fmt.Printf("%v ", file.Sheets[0].Rows[j].Cells[i].Value)
		// 	i++
		// }
		// i = 0
		fmt.Println(file.Sheets[0].Rows[j])
		j++

		if file.Sheets[0].Rows[j].Cells[0].Value == "" {
			fmt.Printf("总共发现%v条数据\n", j-2)
			break
		}
	}
}
func main() {

	fs, err := excel.GetAllFiles("./excel/")
	if err != nil {
		panic(err.Error())
	}
	fmt.Printf(`
===================================================================

                         xlsx合并小工具

    使用说明：
		 1 请确保各个文件的格式是相同的，否则可能出现意外。
		 2 需要合并的文件放在当前目录下的 excel 文件夹里。
		 3 合并后的文件也将被放置在 excel 文件夹下。

           			ALLAN ganger@whut.edu.cn

===================================================================
`)

	fmt.Printf("\n★ 在 excel 文件夹下面发现了 %v 个xlsx文件：\n", len(fs))
	for index, item := range fs {
		fmt.Printf("%2d  ->  %v\n", index, item)
	}

	fmt.Printf("\n3秒后开始合并\n\n")
	time.Sleep(3 * time.Second)

	fmt.Println("★ 开始全力合并文件......")

	// 新建一个表格
	NewFile := xlsx.NewFile()
	NewSheet, err := NewFile.AddSheet("登记表汇总")
	if err != nil {
		log.Fatal("新建工作表失败：", err.Error())
	}

	var sheetTemp *xlsx.Sheet //轮换工作表
	var fileTemp *xlsx.File   //轮换表格

	for index, item := range fs {

		filename := "./excel/" + item
		// fmt.Println(item)
		// filename := "./excel/4.18研究生学海7舍入住名单33人.xlsx"
		fileTemp, err = xlsx.OpenFile(filename)
		if err != nil {
			log.Fatal("文件打开错误：", filename, err.Error())
		}
		sheetTemp = fileTemp.Sheets[0]

		if index == 0 {
			tmp := sheetTemp.Rows[0]
			tmp2 := NewSheet.AddRow()

			excel.CopyRow(tmp2, tmp)

			tmp = sheetTemp.Rows[1]
			tmp2 = NewSheet.AddRow()

			excel.CopyRow(tmp2, tmp)
			fmt.Println("---> 初始化成功")
		}

		fmt.Printf("---> 正在合并第%2v个文件：%s\n", index+1, item)

		for _, _row := range sheetTemp.Rows[2:] {
			if _row.Cells[0].Value == "" {
				continue
			}
			tmp := NewSheet.AddRow()
			excel.CopyRow(tmp, _row)
		}
	}

	fmt.Printf("---> 所有文件合并完成\n")

	// 保存文件
	name := "./excel/测试" + time.Now().Local().String()[:10] + "汇总.xlsx"
	err = NewFile.Save(name)
	if err != nil {
		log.Fatal("汇总文件保存失败：", name, err.Error())
	}
	fmt.Printf("\n★ 已保存到%v\n", name)

	fmt.Printf("\n★ 按下任意键退出程序")
	bb := make([]byte, 1)
	os.Stdin.Read(bb)

	// file, err := xlsx.OpenFile("./excel/4.23研究生西一入住名单1人.xlsx")
	// // file, err := xlsx.OpenFile("./excel/4.18研究生学海7舍入住名单33人.xlsx")
	// if err != nil {
	// 	panic(err.Error())
	// }
	// fmt.Printf("%v\n", file.Sheets[0].Rows[1].Cells[0].Value)

	// fmt.Println(fs)

}
